JavaScript 的 This 會指向不同的對象,這依據函數如何被呼叫的。
當函數被呼叫,形成新的執行環境,而每個執行環境有自己的變數環境
(Variable Environment),也就是被創造在函數的變數所在。如果找不到函數裡面變數的參考,它會到外面找,直到全域環境(global)為止。
JavaScript 的This 如果是在物件的函數中,那麼這個this指的是調用這個方法的對象
EX:
var person = {
firstName: "Ivy",
lastName : "Huang",
id : 5566,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
console.log(person.fullName()); //Ivy Huang
這裡的this 指的是 person這個物件,因為person調用了它自己的方法 —— fullName。
知道了這個概念,我們可以利用物件方法的 this 來改變此物件的屬性
EX:
var person = {
firstName: "Ivy",
lastName : "Huang",
id : 5566,
changeName : function(newName){
this.firstName = newName;
}
};
person.changeName('Lisa');
console.log(person.firstName);//Lisa
如果只是純粹呼叫函數呢?
EX:
function a (){
console.log(this);
}
a(); // window
var b = function(){
console.log(this);
}
b(); //window
也是指向同一個物件,window。
console.log(this)
//VM149:1 Window {0: global, 1: global, 2: global, 3: Window, 4: Window, 5: global, window: //Window, self: Window, document: document, name: '', location: Location, …}
這裡的this指的是全域物件,在瀏覽器裡面是window這個物件。
EX:
var person = {
name: 'Ivy',
age:20,
callName: ()=>{
console.log(this.name)
},
}
person.callName();//undifined
因為這個callName的this指的是window 物件。